// 验证账号密码合理性
const KoaBouncer = require('koa-bouncer')
// 加密解密密码
const bcrypt = require('bcrypt')
// 生成token
const { v4: uuidv4 } = require('uuid');
module.exports = {
    // 手机号
    iphoneValidator:(ctx)=> {
        // 判断客户端的合法性
        try {
            ctx.validateBody('iphone')
                .required('iphone必须得传值')
                .isString()
                .trim()
                .isLength(11,11, "iphone必须是11位")
            // 验证通过
            return true
        } catch (error) {
            if (error instanceof KoaBouncer.ValidationError) {
                ctx.body = {
                    code: 500,
                    msg: error.message
                }
                return
            } else {
                throw error;
            }
        }
    },
    // 密码
    passwordValidator:(ctx)=>{
        try {
            ctx.validateBody('password')
                .required('password必须得传值')
                .isString()
                .trim()
                .isLength(8, 16, "密码不能为空且必须是8—16位")
            // 验证通过
            return true
        } catch (error) {
            if (error instanceof KoaBouncer.ValidationError) {
                ctx.body = {
                    code: 500,
                    msg: error.message
                }
                return
            } else {
                throw error;
            }
        }
    },
    // 验证码
    captchaValidator:(ctx)=>{
        try {
            ctx.validateBody('captcha')
                .required('captcha必须得传值')
                .isString()
                .trim()
                .isLength(4, 4, "验证码必须是4位")
            // 验证通过
            return true
        } catch (error) {
            if (error instanceof KoaBouncer.ValidationError) {
                ctx.body = {
                    code: 500,
                    msg: error.message
                }
                return
            } else {
                throw error;
            }
        }
    },
    // 加密
    encryption: async (value)=>{
        //genSalt用来生成随机字符串，参数代表字符串的复杂度
        const salt = await bcrypt.genSalt(10);
        return await bcrypt.hash(value,salt);
    },
    // 解密
    decryption: async (newPwd,oldPwd)=>{
        return bcrypt.compare(newPwd,oldPwd)
    },
    // 生成token
    createToken:  ()=> {
        const token = uuidv4()
        return token
    }
}